package com.uqbar.arkanoid.scenes;

import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.uqbar.arkanoid.components.Bloque;
import com.uqbar.arkanoid.components.Marcador;
import com.uqbar.arkanoid.components.Pelota;
import com.uqbar.arkanoid.components.Raqueta;
import com.uqbar.arkanoid.game.ArkanoidGame;
import com.uqbar.arkanoid.imagesComponents.ArkanoidBar;
import com.uqbar.arkanoid.imagesComponents.ShinyBall;
import com.uqbar.vainilla.GameScene;

public class ArkanoidScene extends GameScene {

	private Raqueta raqueta;
	private Pelota pelota;
	private ShinyBall skinPelota;
	private ArkanoidBar skinRaqueta;
	private List<Bloque> bloques = new ArrayList<Bloque>();
	private int ancho;
	private int maxScore;
	private Marcador marcador;
	
	
	
	public ArkanoidBar getSkinRaqueta() {
		return skinRaqueta;
	}



	public void setSkinRaqueta(ArkanoidBar skinRaqueta) {
		this.skinRaqueta = skinRaqueta;
		this.addComponent(skinRaqueta);
	}



	public Marcador getMarcador() {
		return marcador;
	}



	public void setMarcador(Marcador marcador) {
		this.marcador = marcador;
	}



	public int getMaxScore() {
		return maxScore;
	}



	public void setMaxScore(int maxScore) {
		this.maxScore = maxScore;
	}



	public int getAncho() {
		return ancho;
	}



	public void setAncho(int ancho) {
		this.ancho = ancho;
	}



	public Raqueta getRaqueta() {
		return raqueta;
	}



	public void setRaqueta(Raqueta raqueta) {
		this.raqueta = raqueta;
		this.addComponent(this.getRaqueta());
	}



	public Pelota getPelota() {
		return pelota;
	}



	public void setPelota(Pelota pelota) {
		this.pelota = pelota;
		this.addComponent(pelota);
	}


	public ShinyBall getSkinPelota() {
		return skinPelota;
	}



	public void setSkinPelota(ShinyBall skinPelota) {
		this.skinPelota = skinPelota;
		this.addComponent(skinPelota);
	}



	public List<Bloque> getBloques() {
		return bloques;
	}



	public void setBloques(List<Bloque> bloques) {
		this.bloques = bloques;
	}
	
	public ArrayList<Color> colores(){
		
		ArrayList<Color> cors = new ArrayList<Color>();
		cors.add(Color.BLACK);
		cors.add(Color.BLUE);
		cors.add(Color.CYAN);
		cors.add(Color.DARK_GRAY);
		cors.add(Color.GRAY);
		cors.add(Color.GREEN);
		cors.add(Color.LIGHT_GRAY);
		cors.add(Color.MAGENTA);
		cors.add(Color.ORANGE);
		cors.add(Color.PINK);
		cors.add(Color.RED);
		cors.add(Color.WHITE);
		cors.add(Color.YELLOW);
		
		return cors;
	}
	
	public Color randomColor(){
		Random n = new Random();
		
		int aleatorio = n.nextInt(13);
		
		return this.colores().get(aleatorio);
	}


	public void addBloque(Color color, int posX, int posY){
		Bloque b = new Bloque(color,posX,posY,this.getPelota());
		this.getBloques().add(b);
		this.addComponent(b);
	}
	
	public void llenarFila(int fila){
		int x = 0;
		while(x <= this.getAncho() - 80){
			this.addBloque(this.randomColor(), x, fila);
			x = x + 80;
		}
	}
	
	public void llenarDeBloques(int filas){
		
		for(int i = 0; i < filas * 20;i = i + 20){
			this.llenarFila(i);
		}
		this.setMaxScore(this.getBloques().size() * 10);
	}

	public ArkanoidScene(int anch){
		super();
		this.setAncho(anch);
		this.setMarcador(new Marcador(0,540,Color.BLACK));
		this.addComponent(this.getMarcador());
	}
	
	public void sustituirMarcadorPorMarcador(Marcador marker){
		this.getMarcador().destroy();
		this.setMarcador(marker);
		this.addComponent(marker);
	}
	
	public void fin(){
		this.getGame().setCurrentScene(((ArkanoidGame) this.getGame()).buildEndScene(this.getMarcador()));
		this.getMarcador().resetLevelValue();
	}
	
}
